nanopyx.methods.channel_registration.corrector
1import numpy as np 2from skimage.io import imread 3 4from ...core.transform.interpolation_bicubic import interpolate 5 6 7class ChannelRegistrationCorrector(object): 8 def __init__(self): 9 self.aligned_stack = None 10 11 def load_translation_masks(self, path=None): 12 if path is not None: 13 path = input("Please provide a filepath to the translation masks") 14 15 return imread(path) 16 17 def align_channels(self, img_stack, translation_masks=None): 18 19 translation_masks = translation_masks 20 21 if translation_masks is None: 22 translation_masks = self.load_translation_masks() 23 24 input_d_type = img_stack.dtype 25 26 n_channels = img_stack.shape[0] 27 height = img_stack.shape[1] 28 width = img_stack.shape[2] 29 30 self.aligned_stack = np.empty((n_channels, height, width)) 31 channels_list = list(range(n_channels)) 32 33 for channel in channels_list: 34 img_slice = img_stack[channel].astype(np.float32) 35 translation_mask = translation_masks[channel] 36 if np.sum(translation_mask) == 0: 37 self.aligned_stack[channel] = img_slice 38 else: 39 for y_i in range(height): 40 for x_i in range(width): 41 dx = translation_mask[y_i, x_i] 42 dy = translation_mask[y_i, x_i + width] 43 value = interpolate(img_slice, x_i-dx, y_i-dy) 44 self.aligned_stack[channel][y_i, x_i] = value 45 46 return self.aligned_stack.astype(input_d_type)
class
ChannelRegistrationCorrector:
8class ChannelRegistrationCorrector(object): 9 def __init__(self): 10 self.aligned_stack = None 11 12 def load_translation_masks(self, path=None): 13 if path is not None: 14 path = input("Please provide a filepath to the translation masks") 15 16 return imread(path) 17 18 def align_channels(self, img_stack, translation_masks=None): 19 20 translation_masks = translation_masks 21 22 if translation_masks is None: 23 translation_masks = self.load_translation_masks() 24 25 input_d_type = img_stack.dtype 26 27 n_channels = img_stack.shape[0] 28 height = img_stack.shape[1] 29 width = img_stack.shape[2] 30 31 self.aligned_stack = np.empty((n_channels, height, width)) 32 channels_list = list(range(n_channels)) 33 34 for channel in channels_list: 35 img_slice = img_stack[channel].astype(np.float32) 36 translation_mask = translation_masks[channel] 37 if np.sum(translation_mask) == 0: 38 self.aligned_stack[channel] = img_slice 39 else: 40 for y_i in range(height): 41 for x_i in range(width): 42 dx = translation_mask[y_i, x_i] 43 dy = translation_mask[y_i, x_i + width] 44 value = interpolate(img_slice, x_i-dx, y_i-dy) 45 self.aligned_stack[channel][y_i, x_i] = value 46 47 return self.aligned_stack.astype(input_d_type)
def
align_channels(self, img_stack, translation_masks=None):
18 def align_channels(self, img_stack, translation_masks=None): 19 20 translation_masks = translation_masks 21 22 if translation_masks is None: 23 translation_masks = self.load_translation_masks() 24 25 input_d_type = img_stack.dtype 26 27 n_channels = img_stack.shape[0] 28 height = img_stack.shape[1] 29 width = img_stack.shape[2] 30 31 self.aligned_stack = np.empty((n_channels, height, width)) 32 channels_list = list(range(n_channels)) 33 34 for channel in channels_list: 35 img_slice = img_stack[channel].astype(np.float32) 36 translation_mask = translation_masks[channel] 37 if np.sum(translation_mask) == 0: 38 self.aligned_stack[channel] = img_slice 39 else: 40 for y_i in range(height): 41 for x_i in range(width): 42 dx = translation_mask[y_i, x_i] 43 dy = translation_mask[y_i, x_i + width] 44 value = interpolate(img_slice, x_i-dx, y_i-dy) 45 self.aligned_stack[channel][y_i, x_i] = value 46 47 return self.aligned_stack.astype(input_d_type)